package com.swak.vertx.config;

import com.swak.annotation.ImOps;
import com.swak.vertx.protocol.im.HeartbeatHandler;
import com.swak.vertx.protocol.im.ImRouter;
import com.swak.vertx.security.SecurityHandler;

import io.vertx.core.Vertx;

/**
 * ImConfig 的配置
 * 
 * @author lifeng
 * @date 2020年8月27日 上午9:44:32
 */
public interface ImConfig extends AbstractConfig {

	/**
	 * 对 ImRouter 进行配置
	 *
	 * @param vertx  代理vertx
	 * @param router router
	 */
	void apply(Vertx vertx, ImRouter router);

	/**
	 * 配置Im 的 通用处理
	 *
	 * @return ImConfig
	 */
	public static ImConfig defaultConfig(SecurityHandler security) {
		return (vertx, router) -> {

			/*
			 * 心跳
			 */
			router.route().ops(ImOps.Message).handler(HeartbeatHandler.hander());

			/*
			 * 安全处理
			 */
			if (security != null) {
				router.route().ops(ImOps.All).handler(security.imHandler());
			}
		};
	}
}
